﻿<%@ Page Language="C#" EnableSessionState="ReadOnly" Async="true" %>
<%@ Import Namespace="System.IO"  %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Untitled Page</title>
    <script runat="server">
        //限制大小 1M
        protected void Page_Load2(object sender, EventArgs e)
        {
            if (this.IsPostBack)
            {
                UploadInfo uploadInfo = this.Session["UploadInfo"] as UploadInfo;
                if (uploadInfo == null)
                {
                    // 让父页面知道无法处理上传
                    const string js = "window.parent.onComplete('error', '无法上传文件。请刷新页面，然后再试一次);";
                    ScriptManager.RegisterStartupScript(this, typeof(todolist_upload_aspx), "progress", js, true);
                }
                else
                {
                    //  让服务端知道我们还没有准备好..
                    uploadInfo.IsReady = false;

                    //  上传验证
                    if (this.fileUpload.PostedFile != null && this.fileUpload.PostedFile.ContentLength > 0

                        && this.fileUpload.PostedFile.ContentLength < 1048576)//  限制1M
                    {
                        //  设置路径
                        string path = this.Server.MapPath(@"Uploads");
                        string fileName = Path.GetFileName(this.fileUpload.PostedFile.FileName);

                        // 上传信息
                        uploadInfo.ContentLength = this.fileUpload.PostedFile.ContentLength;
                        uploadInfo.FileName = fileName;
                        uploadInfo.UploadedLength = 0;

                       //文件存在 初始化...
                        uploadInfo.IsReady = true;

                       //缓存
                        int bufferSize = 1;
                        byte[] buffer = new byte[bufferSize];

                        // 保存字节
                        using (FileStream fs = new FileStream(Path.Combine(path, fileName), FileMode.Create))
                        {                         
                            while (uploadInfo.UploadedLength < uploadInfo.ContentLength)
                            {
                               //从输入流放进缓冲区
                                int bytes = this.fileUpload.PostedFile.InputStream.Read(buffer, 0, bufferSize);
                                // 字节写入文件流
                                fs.Write(buffer, 0, bytes);
                                //  更新大小
                                uploadInfo.UploadedLength += bytes;

                                //  线程睡眠 上传就更慢 这样就可以看到进度条了
                                System.Threading.Thread.Sleep(100);
                            }
                        }

                        // 删除.
                        File.Delete(Path.Combine(path, fileName));

                        //   让父页面知道已经处理上传完毕
                        const string js = "window.parent.onComplete('success', '{0} 已成功上传');";
                        ScriptManager.RegisterStartupScript(this, typeof(todolist_upload_aspx), "progress", string.Format(js, fileName), true);
                    }
                    else
                    {
                        if (this.fileUpload.PostedFile.ContentLength >= 1048576)//1M
                        {
                            const string js = "window.parent.onComplete('error', '超出上传文件限制大小，请重新选择');";
                            ScriptManager.RegisterStartupScript(this, typeof(todolist_upload_aspx), "progress", js, true);
                        }
                        else
                        {
                            const string js = "window.parent.onComplete('error', '上传文件出错');";
                            ScriptManager.RegisterStartupScript(this, typeof(todolist_upload_aspx), "progress", js, true);
                        }
                    }                  
                    uploadInfo.IsReady = false;
                }
            }        
        }

        // 不限制大小
        protected void Page_Load(object sender, EventArgs e)
        {
            if (this.IsPostBack)
            {
                if (Session["UserID"] != null)
                {
                    PPAP.BO.LogBO lbo = new PPAP.BO.LogBO();
                    string FJID = Request.QueryString["FJID"];
                    UploadInfo uploadInfo = this.Session["UploadInfo"] as UploadInfo;
                    uploadInfo.IsReady = false;
                    if (ddlType.SelectedValue != "-1")
                    {
                        if (this.fileUpload.PostedFile != null && this.fileUpload.PostedFile.ContentLength > 0)
                        {
                            string path = this.Server.MapPath(@"Uploads");
                            string fileName = Path.GetFileName(this.fileUpload.PostedFile.FileName);
                            string extension = System.IO.Path.GetExtension(fileName);
                            if ((extension.ToLower() == ".pdf"))
                            {

                                //判断文件名中是否存在中文或中文符号
                                string a = fileName;
                                bool check = false;
                                foreach (char b in a)
                                {
                                    if (b > 255)  //小于255的为英文字符，大于255的则为中文字符
                                    {
                                        check = true;
                                    }

                                }
                                //判断文件名中是否存在中文字符
                                if (check)  //如果文件名中存在中文字符，则提示不能上传
                                {
                                    string js = "window.parent.onComplete('error', ' File name can not contain Chinese characters!');";
                                    ScriptManager.RegisterStartupScript(this, typeof(todolist_upload_aspx), "progress", js, true);
                                }
                                else
                                {

                                    string filepath = ConfigurationManager.AppSettings["FilePath"];   //从配置文件中获取文件存放路径
                                    string time = DateTime.Now.ToString("yyyyMMddHHmmss");
                                    string FileNam_Time = "";
                                    int FileIndex = fileName.LastIndexOf("\\");
                                    string FName = fileName.Substring(FileIndex + 1);
                                    string url = time + FName;
                                    FileNam_Time = FName;//日期和名称组合
                                    if (!Directory.Exists(filepath))
                                    {
                                        System.IO.Directory.CreateDirectory(filepath);
                                    }


                                    uploadInfo.ContentLength = this.fileUpload.PostedFile.ContentLength;
                                    uploadInfo.FileName = fileName;
                                    uploadInfo.UploadedLength = 0;

                                    uploadInfo.IsReady = true;

                                    int bufferSize = 1;
                                    byte[] buffer = new byte[bufferSize];

                                    using (FileStream fs = new FileStream(Path.Combine(filepath, time + FileNam_Time), FileMode.Create))
                                    {
                                        while (uploadInfo.UploadedLength < uploadInfo.ContentLength)
                                        {
                                            int bytes = this.fileUpload.PostedFile.InputStream.Read(buffer, 0, bufferSize);
                                            fs.Write(buffer, 0, bytes);
                                            uploadInfo.UploadedLength += bytes;
                                        }
                                    }

                                    DataInfo(FJID, FileNam_Time, filepath + time, int.Parse(ddlType.SelectedValue), url, (uploadInfo.ContentLength / 1024.0).ToString("n") + "kb", "", Session["UserID"].ToString(), Request.QueryString["filetype"] == null ? "" : Request.QueryString["filetype"].ToString(), Request.QueryString["rid"] == null ? "" : Request.QueryString["rid"].ToString(), "01");
                                    lbo.WriteLog(Session["UserID"].ToString(), "Upload File:" + FName, Request.QueryString["RID"].ToString());
                                    const string js = "window.parent.onComplete('success', '{0} Has been successfully uploaded');";
                                    ScriptManager.RegisterStartupScript(this, typeof(todolist_upload_aspx), "progress", string.Format(js, "File"), true);
                                }
                            }
                            else
                            {
                                string js = "window.parent.onComplete('error', ' Only PDF file supported!');";
                                ScriptManager.RegisterStartupScript(this, typeof(todolist_upload_aspx), "progress", js, true);
                            }

                        }
                        else
                        {
                            const string js = "window.parent.onComplete('error', 'Upload file error');";
                            ScriptManager.RegisterStartupScript(this, typeof(todolist_upload_aspx), "progress", js, true);
                        }
                    }
                    else
                    {
                        const string js = "window.parent.onComplete('error', 'Please select attachment type');";
                        ScriptManager.RegisterStartupScript(this, typeof(todolist_upload_aspx), "progress", js, true);
                    }
                    uploadInfo.IsReady = false;
                }
            }
            else
            {
                PPAP.BO.AttachmentTypeBO typebo = new PPAP.BO.AttachmentTypeBO();
                System.Data.DataSet ds = typebo.GetList("");
                ddlType.Items.Clear();
                ddlType.Items.Add(new ListItem("Please select", "-1"));
                foreach (System.Data.DataRow dr in ds.Tables[0].Rows)
                {
                    ddlType.Items.Add(new ListItem(dr["sx"].ToString() + "-" + dr["ATTACHMENTTYPE"].ToString(), dr["id"].ToString()));
                }
            }
        }

        private void DataInfo(string F_FileID, string F_Filename, string path, int type, string url, string filesize, string remarks, string upby, string filetype, string pparid, string fileversion)
        {
            PPAP.BO.T_FileBO manager = new PPAP.BO.T_FileBO();
            manager.InsertFile(F_FileID, F_Filename, path, type, url, filesize, remarks, upby, filetype, pparid, fileversion);
        }        
    </script>
    <style type="text/css">
        BODY{margin:0; padding:0; background-color:#F0F8FF;}
    </style>
</head>
<body>
    <form id="form" runat="server" enctype="multipart/form-data">
    <asp:ScriptManager ID="scriptManager" runat="server" />
    <script type="text/javascript">
        function pageLoad(sender, args){               
            window.parent.register(
                $get('<%= this.form.ClientID %>'), 
                $get('<%= this.fileUpload.ClientID %>')
            );
        }
    </script>
    <div>
       Attch. type: <asp:DropDownList ID="ddlType" runat="server" Width="520px">
        </asp:DropDownList>

        <br /><br />File:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<asp:FileUpload ID="fileUpload" runat="server" Width="89%" />
    </div>
    </form>
</body>
</html>
